Analyseur de Trafic Réseau et Détection d'Anomalies 📡🛡️
Ce tutoriel explique comment créer un analyseur de trafic réseau en Python avec Scapy et y ajouter des fonctionnalités de détection d'anomalies comme des scans de ports, attaques DDoS ou comportements suspects. Ce guide est destiné aux administrateurs réseau, chercheurs en cybersécurité, ou toute personne souhaitant surveiller le trafic réseau de manière proactive.
Fonctionnalités du Programme :
- 📡 Capture de paquets réseau en temps réel avec la bibliothèque
scapy. - 📊 Analyse des paquets pour détecter des comportements anormaux.
- 🛡️ Détection de scans de ports, DDoS, et d'autres attaques réseau.
- 📁 Sauvegarde des captures réseau dans un fichier PCAP pour une analyse ultérieure.
Pré-requis :
- Python 3.x
- Bibliothèques :
scapyetcollections(inclus dans Python) - Autorisation root (nécessaire pour capturer le trafic réseau sur certaines interfaces)
Code Python (Avancé) :
Ce code est un analyseur de trafic réseau capable de détecter plusieurs types d'anomalies et de sauver les paquets dans un fichier PCAP.
import scapy.all as scapy
from scapy.layers.inet import IP, TCP, UDP, ICMP
from collections import defaultdict
import time
# Dictionnaire pour garder une trace des scans de port détectés
scan_detected = defaultdict(int)
def packet_callback(packet):
if packet.haslayer(IP):
ip_src = packet[IP].src
ip_dst = packet[IP].dst
protocol = packet[IP].proto
print(f"Paquet capturé : Source={ip_src}, Destination={ip_dst}, Protocole={protocol}")
# Détection de scans de ports
if packet.haslayer(TCP):
if packet[TCP].flags == "S": # SYN flag - début d'une connexion
scan_detected[ip_src] += 1
print(f"ALERTE : Scan de port détecté provenant de {ip_src}")
# Détection DDoS basique : trop de paquets SYN en peu de temps
if scan_detected[ip_src] > 100:
print(f"ALERTE CRITIQUE : Potentielle attaque DDoS de {ip_src}")
# Détection d'autres types d'anomalies réseau (UDP flood par exemple)
if packet.haslayer(UDP):
print(f"Paquet UDP détecté de {ip_src} vers {ip_dst}")
def start_packet_sniffing(interface="eth0"):
print(f"Capture des paquets sur l'interface {interface}...")
scapy.sniff(iface=interface, prn=packet_callback, store=False)
def save_packet(packet, filename="traffic_capture.pcap"):
scapy.wrpcap(filename, packet)
print(f"Paquet sauvegardé dans {filename}")
if __name__ == "__main__":
interface = input("Entrez l'interface réseau à surveiller (par défaut eth0) : ") or "eth0"
print(f"Surveillance du trafic réseau sur l'interface {interface}")
try:
start_packet_sniffing(interface)
except KeyboardInterrupt:
print("\nCapture interrompue.")
Manuel d'Utilisation :
🚀 Lancer le Programme :
Pour exécuter le programme, vous devez utiliser un terminal avec les privilèges administratifs nécessaires pour capturer les paquets réseau :
sudo python3 analyseur_trafic_reseau.py
⚙️ Options Disponibles :
- Interface réseau : Entrez l'interface réseau à surveiller (par exemple,
eth0pour Linux ouen0pour macOS). - Le programme affiche en temps réel les informations capturées et détecte les anomalies.
- Scan de port : Si un scan de port est détecté (paquets SYN), une alerte est déclenchée.
- Attaque DDoS : Si plus de 100 paquets SYN proviennent d'une même IP, une alerte critique s'affiche.
Exemple de Sortie (CLI) :
Capture des paquets sur l'interface eth0...
Paquet capturé : Source=192.168.1.10, Destination=192.168.1.1, Protocole=6
Paquet TCP détecté de 192.168.1.10 vers 192.168.1.1
ALERTE : Scan de port détecté provenant de 192.168.1.10
ALERTE CRITIQUE : Potentielle attaque DDoS de 192.168.1.10
⚠️ Attention Éthique :
Ce programme doit être utilisé de manière légale et éthique. L'utilisation non autorisée d'outils de surveillance réseau est illégale dans de nombreux pays. Ce tutoriel est destiné à des usages éducatifs, des audits de sécurité, ou des environnements contrôlés où l'utilisateur a l'autorisation de surveiller le réseau. Veillez à obtenir les autorisations nécessaires avant de capturer du trafic réseau.
Fonctionnalités Avancées :
📈 Ajout de la Visualisation des Anomalies :
Pour aller plus loin, vous pouvez ajouter une fonction de visualisation des anomalies détectées à l'aide de bibliothèques comme matplotlib pour générer des graphiques du nombre de paquets capturés ou des IP suspectes.
import matplotlib.pyplot as plt
def plot_anomalies(scan_detected):
ips = list(scan_detected.keys())
counts = list(scan_detected.values())
plt.bar(ips, counts)
plt.xlabel('Adresse IP')
plt.ylabel('Nombre de Scans Détectés')
plt.title('Détection de Scans de Ports')
plt.show()
📁 Analyse des Captures PCAP :
Vous pouvez également étendre le programme pour analyser des fichiers .pcap capturés précédemment. Cela permet d'effectuer des audits de sécurité hors ligne.
def analyze_pcap(file):
packets = scapy.rdpcap(file)
for packet in packets:
packet_callback(packet)